package com.linkai.mt_2021_11;

import java.util.Scanner;

/**
 * @Description:
 * @Author: 林凯
 * @Date: 2021/10/10 10:10
 */
public class Main01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();       // 健身操动作数量
        int m = sc.nextInt();       // 实际动作数量
        long k = sc.nextLong();     // 阈值
        int Action1[] = new int[n];      // 存放健身操的动作（0,1）
        int Time1[] = new int[2 * n];   // 存放健身操动作的时间序列
        int Action2[] = new int[m];      // 存放实际的的动作（0,1）
        int Time2[] = new int[2 * m];    // 存放实际动作的时间序列
        for (int i = 0; i < n; i++) {
            Time1[2 * i] = sc.nextInt();
            Time1[2 * i + 1] = sc.nextInt();
            Action1[i] = sc.nextInt();
        }
        for (int i = 0; i < m; i++) {
            Time2[2 * i] = sc.nextInt();
            Time2[2 * i + 1] = sc.nextInt();
            Action2[i] = sc.nextInt();
        }

        // 根据动作来遍历，每次遍历一个动作的同时，遍历2个时间序列的元素
        // m == n 的情况
        int num = 0;
        for (int i = 0; i < n; i++) {
            int j = 2 * i;
            //动作相同的情况
            if (Action1[i] == Action2[i]) {
                // 只要计算 action2 比 action1 多出来的部分的长度即可
                if (Time2[j + 1] <= Time1[j] && Time2[j + 1] - Time2[j] < k) {
                    num++; // 不存在重合
                } else if (Time2[j + 1] >= Time1[j] && Time2[j +1] <= Time1[j + 1]) {
                    if (Time1[j] - Time2[j] > 0 && Time1[j] - Time2[j] < k) {
                        num++;      // 左边处在小错误
                    }
                } else if (Time2[j + 1] >= Time1[j + 1]) {   // 考虑右边
                    if (Time2[j] >= Time1[j + 1] && Time2[j + 1] - Time2[j] < k) {
                        num++;
                    } else if (Time2[j] >= Time1[j] && Time2[j] <= Time1[j + 1] && Time2[j + 1] - Time1[j +1] < k) {
                        num++;
                    } else if (Time2[j] <= Time1[j]){
                        if (Time2[j + 1] - Time1[j + 1] < k) {
                            num++;
                        }
                        if (Time1[j] - Time2[j] < k) {
                            num++;
                        }
                    }

                }
            } else {    // 动作不同的情况
                if (Time2[j + 1] <= Time1[j] && Time2[j + 1] - Time2[j] <= k) {
                    num++;
                } else if (Time2[j + 1] >= Time1[j] && Time2[j +1] <= Time1[j + 1]) {
                    if (Time2[j + 1] - Time2[j] < k) {
                        num++;
                    }
                } else if (Time2[j + 1] >= Time1[j + 1]) {   // 考虑右边
                    if (Time2[j] >= Time1[j + 1] && Time2[j + 1] - Time2[j] < k) {
                        num++;
                    } else if (Time2[j] >= Time1[j] && Time2[j] <= Time1[j + 1] && Time2[j + 1] - Time2[j] < k) {
                        num++;
                    }else if (Time2[j] <= Time1[j]){
                        if (Time2[j + 1] - Time1[j + 1] < k) {
                            num++;
                        }
                        if (Time1[j] - Time2[j] < k) {
                            num++;
                        }
                        if (Time1[j + 1] - Time1[j] < k) {
                            num++;
                        }
                    }

                }


            }

        }
        System.out.println(num);
    }
}
